草庐IT

Python Django 模板 : Iterate Through List

全部标签

c++ - 整数类型的模板函数特化

假设我有一个模板函数:templatevoidf(Tt){...}我想为所有原始整数类型编写一个特化。执行此操作的最佳方法是什么?我的意思是:template::valueistrue>voidf(Ii){...}然后编译器为整数类型选择第二个版本,为其他所有类型选择第一个版本? 最佳答案 使用SFINAE//Foralltypesexceptintegraltypes:templatetypenamestd::enable_if::value>::typef(Tt){//...}//Forintegraltypesonly:tem

c++ - 在模板类中时枚举中的整数溢出

深入研究模板元编程,我发现C++中枚举范围的奇怪行为。我收到一个警告:表达式中整数溢出,看起来我实际上并不想要一个超出枚举范围的值。这是代码:#include#includetemplateclasspow{public:enum{result=2*pow::result};};templateclasspow{public:enum{result=1};};enumtest{one,max=4294967295};enumtest_2{last=4294967295*2};intmain(){std::cout:\t"::result:\t"::result:\t"::result:

c++ - 显式实例化类模板中的自动构造函数

我有一个templatestructObj在头文件(obj.h)中使用显式自动移动构造函数(=default)声明的模板。//obj.h#pragmaonce#includetemplatestructObj{std::vectormember;Obj(intm):member(m){}Obj(Obj&&)=default;intmember_fun()const;};externtemplatestructObj;externtemplatestructObj;模板的成员函数在另一个文件(obj.cpp)中定义,并显式实例化模板://obj.cpp#include"obj.h"tem

c++ - 需要一些清晰的模板实现代码

我正在开发一个带有一些模板类和方法(几乎只有模板)的C++库。我想拆分声明和实现以便于阅读。但有时它会变得很疯狂:templateclassFoo{templateclassSubFoo{};templateSubFoobar();};templatetemplateFoo::SubFooFoo::bar(){}这是一个非常小的例子......所以如果你有一些别名来改进这个,或者任何编码风格指南。我正在使用NeoVim,所以如果你知道一些可以让生活更轻松的插件,那也很好。Ps:我没有任何c++限制事实上,我忘记了C++中存在一些基本的东西,比如宏。#defineClassFootemp

c++ - 如果我的模板类型首先作为 lambda 参数出现,MSVC 会引发一个奇怪的错误

考虑这段代码:#defineSOLUTION0templateconstexprintone=1;templatestructA{staticconstexprinto=one>;voidcall(){static_assert(one>==1,"Failure");}};intmain(){#ifSOLUTIONAobject;#endif[](Aa){a.call();};return0;}构建成功hereonideone,无论SOLUTION的值如何定义。现在,我知道这段代码没有什么实际意义,但那是因为我认真地试图找到这种奇怪行为的最小工作示例。如果我使用最新的VisualStu

c++ - 为什么指针衰减优先于推导的模板?

假设我正在编写一个函数来打印字符串的长度:templatevoidfoo(constchar(&s)[N]){std::cout现在我想扩展foo以支持非数组:voidfoo(constchar*s){std::cout但事实证明这打破了我最初的预期用途:foo("hello")//nowprintsraw,size=5为什么?这不需要数组到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用? 最佳答案 这种(符合标准的)歧义的根本原因似乎在于转换成本:重载解析试图最小化将参数转换为相应参数所执行的操作。数组实际上是

c++ - 在模板化类中定义模板化类的静态数据成员

我在另一个类模板中有一个类模板。内部类有一个静态数据成员。我正在努力为它提供一个定义。以下示例适用于clang3.8但不适用于gcc-7.1templatestructOut{templatestructIn{staticintvar;};};templatetemplateintOut::templateIn::var;gcc给出错误:error:templatedefinitionofnon-template‘intOut::In::var’intOut::templateIn::var;^~~我该怎么做才能让gcc开心?编辑:结果是摆脱了template让这个工作:templat

c++ - 在 friend 类模板的基本子句中访问私有(private)定义

在C++中,使类模板B的基类规范依赖于与类模板是friend的类A的私有(private)定义是否合法>B?示例代码:structEmpty{};templatestructB;structA{friendstructB;private:usingBase=Empty;};templatestructB:T::Base{};intmain(){Btest;return0;}Godbolt链接:https://godbolt.org/g/HFKaTQ代码在Clang主干(和旧版本)和MSVC19(VS2017)上编译良好,但在GCC主干(和旧版本)上编译失败:test.cpp:Inins

c++ - 显式转换运算符模板的优先级和歧义

我一直在我的项目中使用模板化的显式转换运算符,以实现从自定义类变体类型的显式转换。重现我的问题的最小示例如下所示(在C++14模式下):#include#include#includeusingnamespacestd;classA{public:templateexplicitoperatorT()const//1{coutexplicitoperatorconstT&()const//2{coutexplicitoperatorT&()//3{cout(a)-3.14)我遇到的问题是为static_cast转换选择的运算符。对于GCC,这是一种预期的(1)情况。输出是:operat

c++ - C++17 中的 "If constexpr"在非模板函数中不起作用

我尝试使用C++17标准。我尝试使用C++17ifconstexpr的功能之一。我有一个问题......请看下面的代码。这编译没有错误。在下面的代码中,我尝试使用ifconstexpr来检查它是否是一个指针。#include#includetemplatevoidprint(Tvalue){ifconstexpr(std::is_pointer_v)std::cout但是当我重写上面的代码时,如下所示,其中ifconstexpr在main函数中:#include#includeintmain(){autovalue=100;ifconstexpr(std::is_pointer_v)s